package com.zzl.alligator.management.system.service;

import com.zzl.alligator.management.system.domain.SysUser;

import java.util.List;

/**
 * TODO
 *
 * @author zhouziliang
 * @since 2020/6/25
 */
public interface ISysUserService {
    /**
     * 根据条件 分页查找用户信息
     *
     * @param sysUser 查找条件
     * @return 用户信息列表
     */
    List<SysUser> findUserList(SysUser sysUser);

    /**
     * 通过用户名查找用户
     *
     * @param name 用户姓名
     * @return 用户信息
     */
    SysUser findUserByName(String name);

    /**
     * 根据用户Id 查找用户
     *
     * @param id 用户ID
     * @return 用户信息
     */
    SysUser findUserById(Long id);

    /**
     * 根据用户ID查找用户所属角色组
     *
     * @param userName 用户名
     * @return 角色组
     */
    String findUserRoleGroupByUserName(String userName);

    /**
     * 根据用户Id 查找部门Id
     *
     * @param userIds 用户ID列表
     * @return 部门ID
     */
    List<Long> getDeptIdsByUserIds(List<Long> userIds);
    /**
     * 根据用户ID查找用户所属岗位组
     *
     * @param userName 用户名
     * @return 岗位组
     */
    String findUserPostByUserId(String userName);

    /**
     * 检查用户账号是否唯一
     *
     * @param userName 用户账号
     * @return
     */
    String checkUserAccountUnique(String userName);

    /**
     * 检查手机号是否唯一
     *
     * @param user 用户信息
     * @return 检查结果
     */
    String checkPhoneNumUnique(SysUser user);

    /**
     * 检查邮箱是否唯一
     *
     * @param user 用户信息
     * @return 检查结果
     */
    String checkEmailUnique(SysUser user);

    /**
     * 新增用户
     *
     * @param user 用户信息
     * @result 插入条数
     */
    int insertUser(SysUser user);

    /**
     * 更新用户 包含用户角色信息、岗位信息
     *
     * @param user
     */
    int updateUser(SysUser user);

    /**
     * 修改用户基本信息
     *
     * @param user 用户
     * @return 修改条数
     */
    int updateUserProfile(SysUser user);

    /**
     * 修改用户头像
     *
     * @param user
     * @return
     */
    int updateUserAvatar(SysUser user);

    /**
     * 重置用户密码
     * @param user
     * @return
     */
    int resetPwd(SysUser user);

    /**
     * 重置用户密码
     *
     * @param user 用户
     * @return 结果
     */
    int resetUserPwd(SysUser user);

    /**
     * 检查用户是否可操作
     * @param user
     * @return
     */
    void checkUserAllowed(SysUser user);

    /**
     * 通过用户ID删除用户
     *
     * @param userId 用户ID
     * @return 结果
     */
    int deleteUserById(Long userId);

    /**
     * 批量删除用户信息
     *
     * @param userIds 需要删除的用户ID
     * @return 结果
     */
    int deleteUserByIds(Long[] userIds);

    /**
     * 批量导入用户
     * @param userList 用户列表
     * @param updateSupport 是否覆盖上传
     * @param operName 操作用户
     * @return 更新结果
     */
    String importUser(List<SysUser> userList, boolean updateSupport, String operName);

    /**
     * 更改用户状态
     *
     * @param user
     * @return
     */
    int changeUserStatus(SysUser user);

    /**
     * 根据部门ID查找用户
     *
     * @param deptId 部门ID
     * @return 部门直属用户
     */
    List<SysUser> findUserByDeptId(Long deptId);
}
